#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "Globales.h"
#include "TPila.h"

void TPila_Crear(TPila *pP, int iTamanioDato) {
  pP->Tope = NULL;
  pP->TamanioDato = iTamanioDato;
}

void TPila_Vaciar(TPila *pP) {
  TNodoPila* pAux = pP->Tope;
  TNodoPila* pSig;
  while (pAux) {
    pSig = pAux->Siguiente;
    free(pAux->Elem);
    free(pAux);
    pAux = pSig;
  }
  pP->Tope= NULL;
}

eBoolean TPila_Vacia(TPila P) {
  if (P.Tope == NULL) {
    return ebTrue;
  } else {
    return ebFalse;
  }
}

eBoolean TPila_Agregar(TPila *pP, void* pE) {
  TNodoPila* pNodo = (TNodoPila*)malloc(sizeof(TNodoPila));
  if (!pNodo) {
    return ebFalse;
  } else {
    pNodo->Siguiente = pP->Tope;
    pP->Tope = pNodo;
    pNodo->Elem = malloc(pP->TamanioDato);
    memcpy(pNodo->Elem, pE, pP->TamanioDato);
    return ebTrue;
  }
}

eBoolean TPila_Sacar(TPila *pP, void* pE) {
  TNodoPila* pAux = pP->Tope;
  pP->Tope = pP->Tope->Siguiente;
  memcpy(pE, pAux->Elem, pP->TamanioDato);
  free(pAux->Elem);
  free(pAux);
  return ebTrue;
}
